package servidor;

import comunicacion.Cliente;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import mensaje.*;

/**
 * Responsabilidad: comunicarse con la interfaz de salida hacia el respectivo cliente
 * y enviarle el mensaje (AckCrear, AckUnion, Graficos, FinPartida).
 */

public class GestorSalida{

    private Iterator it;
    private HashMap clientes;

    public GestorSalida(HashMap clientes){
        this.clientes = clientes;
    }

    //MsjACKCrear
    public void enviar(Boolean respuesta, Cliente cliente){
        cliente.getEnviador().enviar(new MsjAckCrear(respuesta));
    }

    //MsjACKUnion
    public void enviar(Boolean respuesta, int id){
        ((Cliente)clientes.get(id)).getEnviador().enviar(new MsjAckUnion(respuesta, id));
    }

    //MsjGrafico
    public void enviar(ArrayList<Integer[]> jugadores, ArrayList<Integer[]> balas){
        synchronized(clientes){
            it = clientes.entrySet().iterator();
            while(it.hasNext()){
                ((Cliente)((Map.Entry)it.next()).getValue()).getEnviador().enviar(new MsjGrafico(jugadores, balas));
            }
        }
    }

    void enviar(int tipoEscenario, int numJugadores, ArrayList personajes) {
        it = clientes.entrySet().iterator();
        while(it.hasNext()){
            ((Cliente)((Map.Entry)it.next()).getValue()).getEnviador().enviar(new MsjInicioPartida(tipoEscenario, numJugadores, personajes));
        }
    }

   //MsjFinPartida
    public void enviar(){
        synchronized(clientes){
            it = clientes.entrySet().iterator();
            while(it.hasNext()){
                ((Cliente)((Map.Entry)it.next()).getValue()).getEnviador().enviar(new MsjFinPartida(0));
            }
        }
    }
}